package com.example.fmmall.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Date:2022/1/30
 * Author:S
 * Description:以java配置方式在api子工程创建swagger配置。
 * Note:
 */

//在该工程的application.properties加入spring.mvc.pathmatch.matching-strategy=ant_path_matcher解决报错问题。
//swagger 2.9.2 版本访问网址：http://localhost:8080/swagger-ui.html或者http://localhost:8080/doc.html
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    //Swagger会帮助我们生成接口文件
    //1.配置生成的文档信息；2.配置生成规则；

    //如何获取一个接口对象？
    //方式一：new接口，需要在构造器后的{}实现接口的所有抽象方法；
    //方式二：new子类或者实现类；
    //方式三：工厂模式；

    //Docket封装接口文档信息
    @Bean
    public Docket getDocket(){

        //创建封面信息,  指定生成的文档中的封面信息，文档标题，版本，作者等；
        ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
        apiInfoBuilder.title("《锋迷商城》后端接口说明")
                .description("此文档详细说明了项目后端接口规范。")
                .version("v 2.0.1")
                .contact(new Contact("亮哥","www.liangGe.com","liangge@Wang.com"));

        ApiInfo apiInfo = apiInfoBuilder.build();

        //指定文档风格。
        //Docket docket = new Docket(DocumentationType.SWAGGER_2);
        //docket.apiInfo(apiInfo);
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                //只会对指定的包生成接口文档
                .apis(RequestHandlerSelectors.basePackage("com.example.fmmall.controller"))
                //只会对/user/的请求生成文档.paths(PathSelectors.regex("/user/"));PathSelectors.any()对任何接口生成文档；
                .paths(PathSelectors.any())
                .build();

        return docket;
    }
}
